package com.spzx.product;

import com.spzx.common.security.annotation.EnableCustomConfig;
import com.spzx.common.security.annotation.EnableRyFeignClients;
import com.spzx.product.api.domain.ProductSku;
import com.spzx.product.mapper.ProductSkuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.List;

/**
 * 商品模块
 *
 * @author spzx
 */
@EnableCustomConfig
@EnableRyFeignClients
@SpringBootApplication
public class SpzxProductApplication implements CommandLineRunner
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpzxProductApplication.class, args);
        System.out.println("(♥◠‿◠)ﾉﾞ  商品模块启动成功   ლ(´ڡ`ლ)ﾞ   \n" +
                "             ,-.----.                                \n" +
                "            /    /  \\        ,----,                 \n" +
                "  .--.--.   |   :    |     .'    .`|,--,   ,--,      \n" +
                " /  /    '  |   | . :  .'   .'   .'|'. \\  / .`|     \n" +
                "|  :  /`./  .   : |: |,---, '   ./ '|   \\/ /  ;     \n" +
                "|  :  ;_    |   |  \\  :;   | .' /   \\  \\. '  /    \n" +
                " \\ \\    `.|   : .  |`---' /  ;--,    \\   ;  ;     \n" +
                "  `----.   \\:   |`-'  /  /  / .`|    / \\  \\ \\    \n" +
                " /  /`--'  /:   : :   ./__;     .'. /__;   ; \\      \n" +
                "'--'.     / |   | :   ;   |  .'    |   :/\\  \\;     \n" +
                "  `--'---'  `---'.|   `---'        `---'  `--`       \n" +
                "              `---`                                  \n" );
    }


    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private ProductSkuMapper productSkuMapper;


    /**
     * Springboot应用初始化后会执行一次该方法
     * 重写run方法以执行特定的数据同步任务
     * 该方法从MySQL数据库中获取商品SKU信息，并将这些信息的特定字段同步到Redis中
     * 使用可变参数args以支持灵活的参数传递，尽管在此方法中未使用
     *
     * @param args 可变参数，允许传递零个或多个参数
     * @throws Exception 如果方法执行过程中遇到错误，则抛出异常
     */
    @Override
    public void run(String... args) throws Exception {
        // 设置Redis key，用于存储商品SKU信息
        String key = "product:sku:data";

        // 查询MySQL里面商品skuId，获取所有商品SKU信息
        List<ProductSku> productSkus = productSkuMapper.selectList(null);

        // 循环遍历，将数据放入Redis
        productSkus.forEach(
                productSku ->
                        // 设置bit位，根据productSku的ID在Redis中对应位置设置为true
                        redisTemplate.opsForValue().setBit(key, productSku.getId(), true)
        );
    }

}